"""
@Time : 2024/6/17 下午9:08
@Auth : AmirKD
@IDE : PyCharm
"""
import re
from datetime import datetime


class util:
    # 定义一个方法用于写入文件
    def WriteTxt_w_Mode(self, Project_List):
        # w:只写入模式，文件不存在则建立，将文件里边的内容先删除再写入
        with open("Project_Info.txt", "w", encoding="utf-8") as f:
            for i in range(0, len(Project_List)):
                Info_dict = Project_List[i]
                # 最后一行不写入换行符'\n'
                if i == len(Project_List) - 1:
                    f.write("{0}\t{1}\t{2}\t{3}\t{4}\t{5}".format \
                                (Info_dict["ID"], Info_dict["Name"], Info_dict["project"], Info_dict["creat_time"],
                                 Info_dict["finish_time"], Info_dict["progress"]))
                else:
                    f.write("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\n".format \
                                (Info_dict["ID"], Info_dict["Name"], Info_dict["project"], Info_dict["creat_time"],
                                 Info_dict["finish_time"], Info_dict["progress"]))

    # 定义一个方法用于读取文件
    def ReadTxt(self) -> list:
        # 临时列表
        Temp_List1 = []
        Temp_List2 = []
        # 打开同目录下的文件
        f = open("./Project_Info.txt", 'r', encoding="utf-8")
        # 遍历，读取文件每一行信息
        for i in f:
            a = str(i)
            b = a.replace('\n', '')
            Temp_List1.append(b.split("\t"))
        # 将读写的信息并入临时列表
        while len(Temp_List2) < len(Temp_List1):
            for j in range(0, len(Temp_List1)):
                ID = Temp_List1[j][0]
                Name = Temp_List1[j][1]
                project = Temp_List1[j][2]
                creat_time = Temp_List1[j][3]
                finish_time = Temp_List1[j][4]
                progress = Temp_List1[j][5]

                Info_dict = {"ID": ID,
                             "Name": Name,
                             "project": project,
                             "creat_time": creat_time,
                             "finish_time": finish_time,
                             "progress": progress
                             }
                Temp_List2.append(Info_dict)
        # 关闭文件
        f.close()
        # 将含有项目信息的临时列表返回
        return Temp_List2

    # 各种检查办法
    # 定于一个方法，用于检查序号是否规范
    def is_ID(self, ID):
        return ID.isdigit()

    # 定义一个方法，用于检查项目名称是否为空
    def is_Name(self, Name):
        return not Name.strip()

    # 定义一个方法，用于检查项目内容是否为空
    def is_project(self, project):
        return not project.strip()

    # 定于一个方法，用于检查项目创建时间是否规范
    def is_creat_time(self, creat_time, date_format='%Y/%m/%d'):
        try:
            datetime.strptime(creat_time, date_format)
            return True
        except ValueError:
            return False

    # 定于一个方法，用于检查项目截止时间是否规范
    def is_finish_time(self, finish_time, date_format='%Y/%m/%d'):
        try:
            datetime.strptime(finish_time, date_format)
            return True
        except ValueError:
            return False

    # 定于一个方法，用于检查项目完成进度是否规范
    def is_progress(self, progress):
        # 正则表达式匹配x%(x的范围为0-100)
        pattern = r'(100|[1-9][0-9]|[0-9])%'
        return re.match(pattern, progress) is not None

    # 定义一个方法，用于判断是否为中文字符
    def is_Chinese(self, ch):
        if ch >= '\u4e00' and ch <= '\u9fa5':
            return True
        else:
            return False

    # 定义一个方法，用于计算中西文混合字符串的字符串长度
    def Len_Str(self, string):
        count = 0
        for line in string:
            if self.is_Chinese(line):
                count = count + 2
            else:
                count = count + 1
        return count
